package LMS.db;

import LMS.domain.UserEntity;
import LMS.utils.PaginationSupport;

public interface UserRepository {

    /**
     * 获取管理员总数
     *
     * @return
     */
    long getAdminNumbers();

    /**
     * 获取用户总数
     *
     * @return
     */
    long borrowerCount();

    /**
     * 保存用户
     *
     * @param userEntity
     *      用户实体
     * @return
     */
    UserEntity save(UserEntity userEntity);

    /**
     * 通过id 查找用户
     *
     * @param userId
     *      用户id
     * @return
     */
    UserEntity findById(long userId);

    /**
     * 查找用户
     *
     * @param account
     *      用户名
     * @return
     */
    UserEntity findByAccount(String account);

    /**
     * 登录
     *
     * @param account
     *      用户名
     * @param password
     *      密码
     * @return
     */
    UserEntity findByAccount(String account, String password);

    /**
     * 所有管理员页面
     *
     * @param pageNo
     *      页码
     * @param pageSize
     *      页面容量
     * @return
     */
    PaginationSupport<UserEntity> findAdminPage(int pageNo, int pageSize);

    /**
     * 所有借阅者
     *
     * @param pageNo
     *      页码
     * @param pageSize
     *      容量
     * @return
     */
    PaginationSupport<UserEntity> findBorrowerPage(int pageNo, int pageSize);

    /**
     * 获取管理员数量
     *
     * @return
     */
    long getAdminCount();

    /**
     * 封禁用户
     *
     * @param account
     *      用户名
     */
    void lock(String account);

    /**
     * 更新用户信息
     *
     * @param fullName
     *      用户名
     * @param email
     *      邮箱
     * @param phoneNo
     *      电话
     * @param id
     *      id
     * @return
     */
    UserEntity modifyInfo(String fullName, String email, String phoneNo, long id);

    /**
     * 改密码
     *
     * @param password
     *      密码
     * @param id
     *      id
     * @return
     */
    UserEntity modifyPassword(String password, long id);

    /**
     * 删除账号
     *
     * @param account
     *      用户名
     */
    void deleteByAccount(String account);
}
